package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

type Article struct {
	Title   string `json:"title"`
	Desc    string `json:"desc"`
	Content string `json:"content"`
}

// 使用 gin 快速搭建 web 服务
func main() {
	// 创建默认路由引擎
	r := gin.Default()
	// 配置模板路由
	r.LoadHTMLGlob("templates/*")

	// 配置路由
	r.GET("/", func(c *gin.Context) {
		c.String(200, "Hello World!")
	})

	// r.GET("/news", func(c *gin.Context) {
	// 	c.String(200, "news Page")
	// })

	r.POST("/add", func(c *gin.Context) {
		c.String(200, "post 请求")
	})

	// 响应 json 数据
	r.GET("/rJson", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"success": true,
			"msg":     "Hello Gin",
		})
	})

	// 响应 json 传结构体
	r.GET("/rJson/struct", func(c *gin.Context) {
		a := &Article{
			Title:   "返回的是结构体",
			Desc:    "结构体的描述",
			Content: "Hello World",
		}
		c.JSON(200, a)
	})

	// 响应 jsonP 请求 == > 支持回调  ==> 不在使用
	r.GET("jsonp", func(c *gin.Context) {
		a := &Article{
			Title:   "返回的是结构体--jsonp",
			Desc:    "结构体的描述--jsonp",
			Content: "Hello World--jsonp",
		}
		c.JSON(200, a)
	})

	// 响应 xml
	r.GET("xml", func(c *gin.Context) {
		c.XML(http.StatusOK, gin.H{
			"success": true,
			"msg":     "gin 响应 xml",
		})
	})

	// 渲染 html 模板
	r.GET("/news", func(c *gin.Context) {
		c.HTML(http.StatusOK, "news.html", gin.H{
			"title":   "这是后台过来的",
			"success": "多结果渲染",
		})
	})
	// 可以加参数指定端口 r.Run(:8000)  ==> 在 8000 端口启动服务
	r.Run() // 启动 web 服务
}
